package com.itheima.aop;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

import java.util.Arrays;

@Slf4j
@Component
//@Aspect  // 表示这是一个切面类
public class MyAspect5 {

    // 环绕通知 - 原始方法运行前 和 运行后执行
    @Around("execution(* com.itheima.controller.*.*(..))")
    public Object around(ProceedingJoinPoint joinPoint) throws Throwable {
        log.info("环绕通知 ... around before");

        //1. 获取原始方法参数
        Object[] args = joinPoint.getArgs();
        log.info("原始方法参数: {}", Arrays.toString(args));

        //2. 获取原始方法名称
        String methodName = joinPoint.getSignature().getName();
        log.info("原始方法名称: {}", methodName);

        //3. 获取原始方法所属的类名 (目标对象的类名)
        String className = joinPoint.getTarget().getClass().getName();
        log.info("原始方法所属的类名: {}", className);

        //4. 运行原始方法
        Object result = joinPoint.proceed();
        log.info("原始方法运行结果: {}", result);

        log.info("环绕通知 ... around after");
        return result;
    }

}
